Aggregation Pipelines MongoDB এবং DocumentDB-তে ডেটা বিশ্লেষণ এবং প্রক্রিয়া করার জন্য অত্যন্ত শক্তিশালী একটি ফিচার। এটি বিভিন্ন stages এবং operators ব্যবহার করে ডেটাকে একাধিক ধাপে প্রক্রিয়া করতে সহায়তা করে, যেমন ডেটা ফিল্টারিং, গ্রুপিং, সোর্টিং, প্রজেকশন, এবং আরও অনেক কিছু। এখানে আমরা Aggregation Pipelines এর উন্নত ব্যবহারের কিছু কৌশল এবং উদাহরণ আলোচনা করব, যা আপনার ডেটা প্রসেসিংকে আরও শক্তিশালী এবং কার্যকরী করে তুলবে।
এই স্টেজগুলি একে অপরের সাথে সংযুক্ত করে Pipeline তৈরি করা হয়, যা একাধিক স্টেপে ডেটা প্রক্রিয়া করতে সাহায্য করে।
একাধিক স্টেজকে একত্রে ব্যবহার করে জটিল ডেটা প্রসেসিং কার্যক্রম করা যায়। উদাহরণস্বরূপ, আপনি ডেটা ফিল্টার করার পর সেটি গ্রুপ করতে পারেন এবং তারপর সেগুলো সঠিকভাবে সাজিয়ে একটি নির্দিষ্ট লিমিট পর্যন্ত রেজাল্ট দেখতে পারেন।
উদাহরণ: নিচের কুয়েরি একটি ইকমার্স ডেটাবেসের অর্ডার ডেটা গ্রুপ করে, প্রতি গ্রাহকের জন্য মোট অর্ডারের পরিমাণ বের করে এবং সর্বোচ্চ ৫টি গ্রাহক দেখায়।
db.orders.aggregate([
{ $match: { status: "completed" } }, // শুধুমাত্র সম্পন্ন অর্ডার
{ $group: { _id: "$customerId", totalAmount: { $sum: "$amount" } } }, // গ্রুপিং করে মোট পরিমাণ হিসাব করা
{ $sort: { totalAmount: -1 } }, // মোট পরিমাণ অনুযায়ী সাজানো
{ $limit: 5 } // শীর্ষ ৫টি গ্রাহক
])
এই উদাহরণে:
status
ফিল্টার করা হচ্ছে।totalAmount
হিসাব করা হচ্ছে।totalAmount
এর ভিত্তিতে সজ্জিত করা হচ্ছে এবং শীর্ষ ৫টি গ্রাহক দেখানো হচ্ছে।$lookup
(Join-like Operation)MongoDB-তে $lookup ব্যবহার করে দুটি আলাদা কালেকশনের মধ্যে join করা যায়, যা SQL ডেটাবেসের JOIN এর মতো। এটি দুটি কালেকশনের মধ্যে সম্পর্ক স্থাপন করে।
উদাহরণ: ধরা যাক, আপনার কাছে orders
এবং products
নামের দুটি কালেকশন আছে এবং আপনি প্রতিটি অর্ডারের সাথে সংশ্লিষ্ট পণ্যের তথ্য যুক্ত করতে চান।
db.orders.aggregate([
{
$lookup: {
from: "products", // যেখানে join করতে হবে
localField: "productId", // অর্ডার ডকুমেন্টের ক্ষেত্র
foreignField: "_id", // পণ্য ডকুমেন্টের ক্ষেত্র
as: "productDetails" // যেখানে ফলাফল রাখা হবে
}
},
{ $unwind: "$productDetails" } // পণ্যের তথ্য এক্সপ্যান্ড করা
])
এখানে:
$lookup
দুটি কালেকশনের মধ্যে সম্পর্ক স্থাপন করেছে, এবং অর্ডারের তথ্যের সাথে সংশ্লিষ্ট পণ্যের তথ্য যুক্ত করেছে।$unwind
ব্যবহার করে অ্যারে ভ্যালু এক্সপ্যান্ড করা হয়েছে।$facet
(Multiple Pipelines)$facet স্টেজ ব্যবহার করে আপনি একাধিক পিপলাইনের মাধ্যমে একসাথে একাধিক ডেটা প্রসেসিং করতে পারেন। এটি জটিল কুয়েরি তৈরি করতে সহায়ক।
উদাহরণ: ধরা যাক, আপনি চান একদিকে সকল পণ্য তথ্য এবং অন্যদিকে বিক্রির মোট পরিমাণ আলাদা আলাদা ভাবে বের করতে:
db.orders.aggregate([
{
$facet: {
"totalSales": [
{ $match: { status: "completed" } },
{ $group: { _id: null, totalSales: { $sum: "$amount" } } }
],
"productStats": [
{ $unwind: "$products" },
{ $group: { _id: "$products.productId", totalSold: { $sum: "$products.quantity" } } }
]
}
}
])
এখানে:
totalSales
এর জন্য এবং অপরটি productStats
এর জন্য।কখনও কখনও আপনার প্রক্রিয়াজাত ডেটার মধ্যে আরও জটিল ফিল্টার এবং সোর্টিং প্রয়োজন হতে পারে, যা সহজে $match এবং $sort স্টেজ ব্যবহার করে করা যায়।
উদাহরণ: ধরা যাক, আপনি এমন সমস্ত অর্ডারের ডেটা চান যেখানে গ্রাহক age > 30
এবং পরিমাণ > 1000
, এবং সেগুলি date এর ভিত্তিতে সজ্জিত করতে চান:
db.orders.aggregate([
{ $match: { age: { $gt: 30 }, amount: { $gt: 1000 } } },
{ $sort: { date: -1 } }
])
এটি শুধুমাত্র সেই অর্ডারগুলো দেখাবে যেখানে গ্রাহকের বয়স ৩০ এর বেশি এবং অর্ডারের পরিমাণ ১০০০ এর বেশি।
$addFields
এবং $set
(Adding New Fields)$addFields এবং $set অপারেশন ব্যবহার করে আপনি নতুন ফিল্ড যোগ করতে পারেন বা বিদ্যমান ফিল্ডের মান পরিবর্তন করতে পারেন।
উদাহরণ: ধরা যাক, আপনি প্রতি অর্ডারের সাথে একটি নতুন ফিল্ড taxAmount
যোগ করতে চান:
db.orders.aggregate([
{ $addFields: { taxAmount: { $multiply: ["$amount", 0.1] } } }
])
এখানে:
$addFields
অপারেশনটি প্রতিটি অর্ডারের জন্য taxAmount
হিসাব করে এবং সেটি নতুন ফিল্ড হিসেবে যোগ করেছে।Aggregation Pipelines MongoDB এবং DocumentDB-তে ডেটা প্রক্রিয়া এবং বিশ্লেষণের জন্য অত্যন্ত শক্তিশালী একটি ফিচার। $match, $group, $sort, $lookup, $facet, এবং $addFields এর মতো স্টেজগুলি ব্যবহার করে আপনি জটিল ডেটা প্রসেসিং ও বিশ্লেষণ কার্যক্রম সম্পাদন করতে পারেন। এই ফিচারগুলো ব্যবহার করে আপনি আপনার ডেটা ম্যানিপুলেশন এবং বিশ্লেষণ প্রক্রিয়াকে আরও শক্তিশালী এবং কার্যকরী করতে পারেন।
common.read_more